/**
 * API密钥测试工具
 * 用于测试配置的API密钥是否有效
 */
const axios = require('axios');
const dotenv = require('dotenv');
const path = require('path');
const fs = require('fs');

// 加载环境变量
dotenv.config();

// 获取API密钥
const apiKey = process.env.ARK_API_KEY;

if (!apiKey) {
  console.error('错误: 未设置ARK_API_KEY环境变量');
  console.error('请确保.env文件中配置了正确的API密钥');
  process.exit(1);
}

async function testApiKey() {
  console.log('开始测试API密钥...');
  console.log(`API密钥长度: ${apiKey.length}`);
  console.log(`API密钥前4位: ${apiKey.substring(0, 4)}...`);
  
  // 简单文本请求，测试API密钥是否有效
  const apiUrl = 'https://ark.cn-beijing.volces.com/api/v3/chat/completions';
  
  const requestData = {
    model: "doubao-1.5-vision-pro-32k-250115",
    messages: [
      {
        role: "user",
        content: "你好，这是一个API密钥测试，请简要回复确认连接正常。"
      }
    ]
  };
  
  try {
    console.log('发送测试请求到Doubao API...');
    console.log(`API地址: ${apiUrl}`);
    
    const response = await axios.post(apiUrl, requestData, {
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json'
      },
      timeout: 10000
    });
    
    if (response.status === 200) {
      console.log('✅ API密钥有效，请求成功!');
      console.log('响应状态码:', response.status);
      
      if (response.data.choices && response.data.choices.length > 0) {
        const content = response.data.choices[0].message.content;
        console.log('\nAPI回复内容:');
        console.log(content);
        
        // 写入成功记录
        fs.writeFileSync('./api-key-test-success.log', JSON.stringify({
          timestamp: new Date().toISOString(),
          status: 'success',
          response: {
            status: response.status,
            content: content
          }
        }, null, 2));
      }
    } else {
      console.error('❌ 请求返回非200状态码:', response.status);
      console.error('响应数据:', response.data);
    }
  } catch (error) {
    console.error('❌ API请求失败!');
    
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('错误响应:', error.response.data);
      
      // 错误码解析
      if (error.response.status === 401) {
        console.error('\n⚠️ 认证失败 (401)! API密钥无效、格式不正确或已过期。');
        console.error('请确认您的API密钥格式是否正确，格式应该类似: ak-xxxx-xxxx-xxxx');
      } else if (error.response.status === 403) {
        console.error('\n⚠️ 拒绝访问! 密钥可能没有所需的权限或配额已用尽。');
      } else if (error.response.status === 429) {
        console.error('\n⚠️ 请求过多! 已达到API速率限制。');
      }
      
      // 写入错误日志
      fs.writeFileSync('./api-key-test-error.log', JSON.stringify({
        timestamp: new Date().toISOString(),
        status: 'error',
        error: {
          status: error.response.status,
          data: error.response.data
        }
      }, null, 2));
    } else {
      console.error('错误详情:', error.message);
      
      // 写入错误日志
      fs.writeFileSync('./api-key-test-error.log', JSON.stringify({
        timestamp: new Date().toISOString(),
        status: 'error',
        error: {
          message: error.message
        }
      }, null, 2));
    }
  }
}

// 执行测试
testApiKey();
